package com.springboot.fram.core.encryption;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * @author madman
 * @Title: HMacMD5Util
 * @Description: HMacMD5 数据签名
 * @date 2018/6/11 15:32
 */
public class HMacMD5 {
    /**
     * 将待加密数据data，通过密钥key，使用hmac-md5算法进行加密，然后返回加密结果。 参照rfc2104 HMAC算法介绍实现。
     *
     * @param key  密钥
     * @param data 待加密数据
     * @return 加密结果
     * @throws Exception
     */
    public static byte[] getHmacMd5Bytes(byte[] key, byte[] data) throws Exception {
        SecretKey secretKey = new SecretKeySpec(key, "HmacMD5");
        Mac mac = Mac.getInstance(secretKey.getAlgorithm());
        mac.init(secretKey);
        return mac.doFinal(data);
    }

    /**
     * 生成Hmac加密后字符串
     * Title: HmacMD5
     * Description:
     *
     * @param key 密匙
     * @return
     */
    public static String encodeHmacMD5(byte[] key, byte[] data) throws Exception {
        //转化为字节
        String str = BytesToHexString.toString(HMacMD5.getHmacMd5Bytes(key, data)).toUpperCase();
        return str;
    }

}
